Азат Asked:2022-09-07 17:39:43 +0000 UTC2022-09-07 17:39:43 +0000 UTC 2022-09-07 17:39:43 +0000 UTC 使用可能的值集设计 MS SQL Server 数据库 772 请告诉我。我正在设计一个数据库并遇到了问题。这是一个示例数据库项目 事实证明,1 个人可以拥有多个服务。例如:人{id:1;姓名:伊万;date: 04/07/2022} 会和 idService {1} 是正常的,但是如果 Person 引用了 Service 表中的 id 集。请告诉我如何解决这个问题 sql-server 1 个回答 Voted Best Answer Great Tech 2022-09-07T17:55:57Z2022-09-07T17:55:57Z 既然一个人可以有多个服务,为什么还要在person表中提到服务ID呢?你应该给这个人一个标识符。 下面的一组表可以被认为是一个很好的实现: Person (PersonID, Name, Date)- 我们在这里存储每个人的信息(顺便说一句,日期是什么?)。 Services (PersonID, ServiceID)- 我们在这里存储角色服务包。 ServiceNames (ServiceID, Name)- 在这里我们存储有关如何调用每个服务的信息(假设每个服务ServiceID对应一个特定的Name) 信息提取 要获取某种信息,您需要一个 JOIN。 例如,要获得一个表,其中包含一个人和她的名字,以及一个服务和服务的名称,您需要使用连接:通过PersonID表之间的键Person和Services,然后通过表ServiceID之间的键表Services和ServiceNames . 请求逻辑: 从Person表中选择所有值join with Services by key Person.PersonID = Services.PersonID join with ServiceNames by key Services.ServiceID = ServiceNames.ServiceID
既然一个人可以有多个服务,为什么还要在person表中提到服务ID呢?你应该给这个人一个标识符。
下面的一组表可以被认为是一个很好的实现:
Person (PersonID, Name, Date)- 我们在这里存储每个人的信息(顺便说一句,日期是什么?)。Services (PersonID, ServiceID)- 我们在这里存储角色服务包。ServiceNames (ServiceID, Name)- 在这里我们存储有关如何调用每个服务的信息(假设每个服务ServiceID对应一个特定的Name)信息提取
要获取某种信息,您需要一个 JOIN。
例如,要获得一个表,其中包含一个人和她的名字,以及一个服务和服务的名称,您需要使用连接:通过
PersonID表之间的键Person和Services,然后通过表ServiceID之间的键表Services和ServiceNames.请求逻辑:
从Person表中选择所有值join with Services by key Person.PersonID = Services.PersonID join with ServiceNames by key Services.ServiceID = ServiceNames.ServiceID