关于身份类别的数据库设计

时间:2012-11-08 19:41:37

标签: database database-design

所以,我正在学习(和使用)一个数据库,到目前为止我认为我理解它

今天,以下示例出现了一个问题:

我有一个带有标识的表(例如,对象,它们有一个名称和一个物理描述,当然还有一个主要的自动增量整数索引)。而且我有与之相互作用的身份(例如人)。

有没有办法在我的数据库中对这些身份进行分类?例如,假设机械师仅与一组非常具体的对象(工具,汽车零件等)进行交互。因此,将对象的任何搜索限制在该集合的对象上是有意义的。

有关解决此问题的自然方式(如果有)的任何提示? 感谢

1 个答案:

答案 0 :(得分:3)

您需要一个带有ID和描述的表类别

一个对象可以有很多类别,一个类别可以有很多对象。所以我们面临many to many relationship

您需要第三个表格,我们称之为junction table。该表将具有类别的id和对象的id。

设计看起来像这样

Category
Id | Description

Object
Id | Description

Person
id | Type | ...

Categories_Objects
Id | CategoryId | ObjectId

然后,如果你想选择一个类别为1的机制的对象(这是一个例子,你需要先找到id)

你会做这样的选择

SELECT Object.Description 
FROM Object 
     INNER JOIN Categories_Objects ON Object.id = Categories_Objects.ObjectID 
WHERE CategoryID = 1

OR

SELECT Object.Description 
FROM Object 
     INNER JOIN Categories_Objects ON Object.id = Categories_Objects.ObjectID
     INNER JOIN Category ON Categories_Objects.CategoryId = Category.id
WHERE category.description = "Mechanic"

注意:如果一个人可以使用多种类别的工具,您将需要另一个这样的联结表

Persons_Categories
ID | PersonID | CategoryID