Questions tagged «foreign-key»

在RDBMS平台中使用的一种完整性约束,用于确保列中的值与另一个表中的键值范围之一匹配。

2
更改外键的引用索引
我有这样的事情: CREATE TABLE T1 ( Id INT ... ,Constraint [PK_T1] PRIMARY KEY CLUSTERED [Id] ) CREATE TABLE T2 ( .... ,T1_Id INT NOT NULL ,CONSTRAINT [FK_T2_T1] FOREIGN KEY (T1_Id) REFERENCES T1(Id) ) 出于性能(和死锁)的原因,我在T1上创建了一个新索引 CREATE UNIQUE NONCLUSTERED INDEX IX_T1_Id ON T1 (Id) 但是,如果我检查哪个索引引用了FK,则继续引用聚集索引 select ix.index_id, ix.name as index_name, ix.type_desc as index_type_desc, …

1
设计一个友谊数据库结构:我应该使用多值列吗?
假设我有一个名为的表User_FriendList,它具有以下特征: CREATE TABLE User_FriendList ( ID ..., User_ID..., FriendList_IDs..., CONSTRAINT User_Friendlist_PK PRIMARY KEY (ID) ); 让我们假设该表包含以下数据: + ---- + --------- + --------------------------- + | ID | 用户名 | Friendlist_IDs | + ---- + --------- + --------------------------- + | 1 | 102 | 2:15:66:35:26:17:| + ---- + --------- + --------------------------- + …

3
零或一到零或一
如何以最自然的方式在Sql Server中对零或一到零或一的关系建模? 有一个“危险”表,列出了站点上的危险。有一个“任务”表,用于需要在站点上完成的工作。有些任务是修复危险,没有任务可以应对多种危险。有些危害有修复它们的任务。没有任何危险可以使两个任务相关联。 以下是我能想到的最好的方法: CREATE TABLE [dbo].[Hazard]( [HazardId] [int] IDENTITY(1,1) NOT NULL, [TaskId] [int] NULL, [Details] [varchar](max) NULL, CONSTRAINT [PK_Hazard] PRIMARY KEY CLUSTERED ( [HazardId] ASC )) GO ALTER TABLE [dbo].[Hazard] WITH CHECK ADD CONSTRAINT [FK_Hazard_Task] FOREIGN KEY([TaskId]) REFERENCES [dbo].[Task] ([TaskId]) GO CREATE TABLE [dbo].[Task]( [TaskId] [int] IDENTITY(1,1) NOT NULL, …

1
使用外键上的显式单键值克服MERGE JOIN(INDEX SCAN)
已添加7/11问题是在MERGE JOIN期间由于索引扫描而发生死锁。在这种情况下,一个事务试图在FK父表的整个索引上获得S锁,但是以前另一个事务将X锁置于索引的键值上。 让我从一个小例子开始(使用70-461 cource的TSQL2012 DB): CREATE TABLE [Sales].[Orders]( [orderid] [int] IDENTITY(1,1) NOT NULL, [custid] [int] NULL, [empid] [int] NOT NULL, [shipperid] [int] NOT NULL, ... ) 列[custid], [empid], [shipperid]是相应的相关参数[Sales].[Customers], [HR].[Employees], [Sales].[Shippers]。在每种情况下,我们在父母表中的引用列上都有一个聚集索引。 ALTER TABLE [Sales].[Orders] WITH CHECK ADD CONSTRAINT [FK_Orders_Customers] FOREIGN KEY([custid]) REFERENCES [Sales].[Customers] ([custid]) ALTER TABLE [Sales].[Orders] WITH CHECK ADD …

3
如何在保留FK关系的同时将迁移数据复制到带有Identity列的新表中?
我想将数据从一个数据库迁移到另一个数据库。表模式完全相同: CREATE TABLE Customers( [Id] INT NOT NULL PRIMARY KEY IDENTITY, (some other columns ......) ); CREATE TABLE Orders( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [CustomerId] INT NOT NULL, (some other columns ......), CONSTRAINT [FK_Customers_Orders] FOREIGN KEY ([CustomerId]) REFERENCES [Customers]([Id]) ) 这两个数据库具有不同的数据,因此在两个数据库中,同一表的新标识密钥将有所不同。那不是问题;我的目标是将新数据添加到现有数据中,而不是完全替换整个表中的所有数据。但是,我想保留插入数据的所有父子关系。 如果我使用SSMS的“生成脚本”功能,则脚本将尝试使用相同的ID进行插入,这将与目标数据库中的现有数据发生冲突。如何仅使用数据库脚本复制数据? 我希望目标处的身份列从其上一个值正常继续。 Customers没有任何其他UNIQUE NOT NULL约束。它是确定在其他列重复数据(我使用的是Customers与Orders只是作为一个例子在这里,所以我没有解释整个故事)。问题是关于任何一对N关系。

2
有关基础设计,首次数据库设计的建议
我正在学习成为一名Java开发人员的课程。 该课程涉及使用数据库,但是不幸的是,我们从未真正设计任何数据库。 大多数时候,我们会获得预制数据库,并且必须在其上实现代码以插入,更新,读取或删除数据。 但是,当我进行最后的测试时,很可能我会做一些涉及数据库的事情,因此我想尝试设计一些较小的项目以摆脱设计的束缚,因为我注意到良好的数据库设计在编写代码以使用它。 我希望这里允许这些类型的问题,并且不会太广泛。 这是东西简单做了一个小设计,我clubs和members同addresses和phonenumbers。 将有多个俱乐部。 每个俱乐部将有多个成员(明显) 成员不能成为多个俱乐部的成员 成员可以具有多个电话号码和电子邮件地址 会员只能有一个地址 一个地址可以属于不同的成员(夫妇或兄弟姐妹) 我最大的困惑: 如果我想在其中添加Club描述所有者(也将是成员)的列,那么最好是在没有两次列出相同成员的情况下的最佳方法? 我应该将所有表格放在id的自动增量上,还是一个坏主意?(好处/缺点?) 如果在“外键”选项卡中添加外键,这些外键会自动对应于正确的表吗?还是也必须将它们添加到列中?(见图2) 而我在所有可能noobiest问题...我是否把的外键phonenumber并email在各自的表链接到一个PERSON_ID或者我应该把phoneNumber的和电子邮件标识的在人的表? (我对图片中的语言不是英语表示歉意,希望这不是太大的问题)

3
当一个表需要太多的外键时,有什么选择呢?
我们有一个基本表,用于定义零件并保存零件号,描述,价格,重量等信息。我们还有大约400个表,这些表引用该基本表并根据零件的类型/类别提供有关零件的其他信息。 我们从使用外键约束开始,以便如果在400个特定于零件的表之一中引用了某个零件,则不能从基表中删除该零件,但是我们很快就达到了SQL Server 2005推荐的最大253个外键。 在这种情况下,是否可以使用外键替代方案来确保数据完整性?访问数据时我们还没有看到性能问题,但是由于查询计划太复杂,更新基表中的现有零件将失败。

1
如何在SQL Server中创建与非主键的关系?
我有一个用户表,该表有两列,分别是主键UserID和另一列UserName。 UserID(int)PK 用户名(varchar(256) 它们都是唯一的,但出于某些原因,我决定将UserName用作其他表中的引用。因此,例如,订单表通过UserName而不是userid引用了user。 订单编号 用户名 我想在所有引用UserName和Users表的表之间建立一种关系,以便获得SQL Server的级联更新/删除功能。 但是SQL Server不允许我在非主键列上创建关系。有什么方法可以在不更改用户表的情况下获得级联更新/删除功能,以便UserName是主键而不是UserID?

3
JOIN语句的输出是什么样的?
我一直想使用联接一段时间,但是我在可视化输出时遇到了麻烦,因此我知道如何使用它。 假设我有2张桌子: CREATE TABLE Cities ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, city tinyblob ); CREATE TABLE Users ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, username TINYBLOB, city INT UNSIGNED, FOREIGN KEY (city) REFERENCES Cities (id) ); 如果我的应用程序要运行SQL查询以获取用户的个人资料数据,我将如何使用联接来获取与用户记录相关联的城市,输出的记录将如何显示?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.