如何在一列数据库设计中创建多个类型id

本文关键字:创建 id 类型 数据库 一列 | 更新日期: 2023-09-27 18:14:57

我正在设计SQL Server数据库,我必须在一列中创建多个FK

我有了这些表格并在其中一个表格中创建了一个菜单

Table 1             Table 2       Table 3
| Pages            | Jobs         | News
|------------      |---------     |-----------
| Pageid           | Jobid        | NewsId
| PageName         | JobName      | NewsTitle
| MenuName         | MenuName     | MenuName       

我的目标是在一列中引用这些表

我有一个来自这个场景的表

| MenuGroup
|------------       
| menuGroupId
| MenuName
| RecordeId

那么如何实现规范化的数据库设计呢?

如何在一列数据库设计中创建多个类型id

Sol 1 (Fixed no of Columns):
这是最标准和规范化的解。您可以按照@Tim

的建议用nullable columns创建一个新表。
| JoiningTable
|------------      
| Id
| PageId
| JobId
| NewsId

Sol2:(Dynamic no of Columns):
虽然我不认为这是一个好方法,因为referential integrity在这里丢失了,但是在动态列数的情况下,除了这个,我没有任何其他解决方案。

Type:
|------------      
| TypeId
| Name

JoiningTable
|------------      
| Id
| JoiningId
| TypeId (news,job,pages etc etc)

您可以将JoiningTable中的TypeId字段替换为type字段,将这些two表压缩为one

NoSQl也可能是一个解决方案,但我没有NOSQL的工作经验,所以我不能推荐任何关于它的东西。

我建议您创建另一个表,将3个表的id作为外键,然后在MenuGroup表中使用这个新表的主键,您可以使用LEFT JOIN通过新表获取单个表。

在单个表中拥有多个FK并不坏,尝试使用MenuName列作为FK,这样您就不必在数据库中创建额外的字段。