Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL创建两个表和一个链接表_Sql_Sql Server_Tsql_Relational Database_Relational - Fatal编程技术网

SQL创建两个表和一个链接表

SQL创建两个表和一个链接表,sql,sql-server,tsql,relational-database,relational,Sql,Sql Server,Tsql,Relational Database,Relational,我有两个表:Employee(ID,Name,Address)和Store(ID,Address),我想记录每个商店工作人员的信息 我想制作一个名为Employee_List table的新表。我的问题是: 1-员工列表和员工有一对多的关系,对吗 2-要存储的员工列表具有一对一的关系,对吗 3-如何为Employee_列表表定义外键和主键 员工名单应包括: 员工列表ID(内部主键) 员工id(内部FK) 门店标识(INT FK) 我建议更改表名以表示复合表,即。 员工商店。这将允许您的模式具

我有两个表:Employee(ID,Name,Address)和Store(ID,Address),我想记录每个商店工作人员的信息

我想制作一个名为Employee_List table的新表。我的问题是:

1-员工列表和员工有一对多的关系,对吗

2-要存储的员工列表具有一对一的关系,对吗

3-如何为Employee_列表表定义外键和主键


员工名单应包括:

  • 员工列表ID(内部主键)
  • 员工id(内部FK)
  • 门店标识(INT FK)
我建议更改表名以表示复合表,即。
员工商店
。这将允许您的模式具有可伸缩性,员工可以在多个商店中工作

在SQL Server的

CREATE TABLE EmployeeStores
(
   EMPLOYEEStoreID   INT IDENTITY,
   EMPLOYEEID INT FOREIGN KEY REFERENCES Employee(employee_id),
   STOREID INT FOREIGN KEY REFERENCES Store(store_id)
)

为什么不向employee添加一个属性worksIn?worksIn的属性值是存储id值。worksIn是store(store_id)上的外键。除非员工在多个store中工作,@muehlbau说,只需将store_id列添加到employeeTrue@poplaines即可。如果一名员工可以在多个门店工作,则可以在(员工id,门店id)中使用主键(员工id,门店id),并在员工(员工id)和门店(门店id)上使用外键创建新关系。一些员工(即经理)在多个商店工作。@Sam-我提供的解决方案允许多个员工在多个商店工作。我使用SQL Server给出了答案,您使用的是RDM吗?您不需要员工列表ID。PK是员工id,storeid。@新表的muehlbau PK不是员工_id@muehlbau-Employee_id和storeID是复合键。您仍然可以使用EmployeeStoreID或EmployeeListID,这将更容易在新表中查找记录。-这不应该成为否决票的理由,因为它是完全有效的。@DarrenDavies我不是说你不能拥有它,但为什么要引入一个新的人工密钥,浪费空间,而不仅仅是使用复合密钥?顺便说一句,这并不能使查找记录变得更容易;在处理核心数据库时,我可以向您保证,查询优化器通常甚至可以从复合键中获益。@DarrenDavies是的,我不能向您保证每个查询引擎都会从中获益-但是您不能说没有空间浪费(列表中的每个条目都有至少4字节的人工键开销)。您发现第一个创建值用例是一个更糟糕的用例:谁说第一个条目没有被删除,而一个新条目插入了人工键1?我的论点来自于关系设计的观点——sry代表否决票,顺便说一句,这有点苛刻,但当涉及到关系设计中的错误假设时,我很激动。