Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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_Database_Database Design - Fatal编程技术网

将逻辑数据模型转换为SQL表设计

将逻辑数据模型转换为SQL表设计,sql,database,database-design,Sql,Database,Database Design,在我最近制作的LDM中,我有一个实体,其结构如下: Building_ID (Primary Key, Foreign Key), Plant_ID (Foreign Key), Build_Year (Primary Key), Size 我需要使用这种设计在SQL数据库中创建一个表。我遇到的问题是如何处理这里的主键?SQL表可以有多个主键吗?如果这个问题的答案是肯定的,那么哪一列应该作为唯一索引?我应该创建一个新列作为唯一索引标识符吗?我知道任何关系数据库系统(SQL Server、Ora

在我最近制作的LDM中,我有一个实体,其结构如下:

Building_ID (Primary Key, Foreign Key),
Plant_ID (Foreign Key),
Build_Year (Primary Key),
Size

我需要使用这种设计在SQL数据库中创建一个表。我遇到的问题是如何处理这里的主键?SQL表可以有多个主键吗?如果这个问题的答案是肯定的,那么哪一列应该作为唯一索引?我应该创建一个新列作为唯一索引标识符吗?

我知道任何关系数据库系统(SQL Server、Oracle、Firebird、IBM DB2、Sybase等)的任何SQL表都只能有一个主键-毕竟,它是主键-只能有一个

但是,主键可以由多个列组成(称为“复合主键”)。还有一些缺点,例如:来自其他表的所有外键约束也必须在复合主键中指定所有列,因此连接表有点麻烦(因为您需要为连接中键中包含的所有列指定所有相等约束)


除了主键外,您还可以有多个备用键——其他也可以唯一标识行的列。如果这些可以帮助您加快对表格的访问速度(但不要过度索引您的表格!少即是多)

谢谢您提供的信息,Marc。因此,您是否建议我创建一个新的主键(在本例中,我将使Building_ID成为主键)并从“build_year”中删除主键约束?@Evan:Building_ID是否保证每行不为空且唯一?然后是的-这是一个完美的主键。如果只有一列可以唯一、可靠地标识表中的每一行,那么在主键中添加额外的列是没有意义的。问题是,
Building\u ID
也是另一个实体
Building
的外键。上面唯一一个不是另一个表外键的主键是
Build_Year
——但我们要面对它,它决不能保证是唯一的。@evan:这是否是另一个表中的FK是无关的——唯一的问题是:它不是空的,它是否唯一可靠地标识了表中的每一行??如果是-->它是您的主键;如果没有-->请继续查找