将逻辑数据模型转换为SQL表设计
在我最近制作的LDM中,我有一个实体,其结构如下:将逻辑数据模型转换为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
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是无关的——唯一的问题是:它不是空的,它是否唯一可靠地标识了表中的每一行??如果是-->它是您的主键;如果没有-->请继续查找