数据库设计 - 特许经营

时间:2013-01-31 16:14:06

标签: database database-design

我正在尝试设计一个存储以下内容的数据库:

- Franchise Name (string)
- Employee Count (integer)
- Locations (zip-code)

我遇到的问题是数据库的潜在规模(所有潜在的特许经营权,以及地点)以及如何设计数据库,以便特定特许经营的邮政编码可以存储在同一个单元格中。这可能是一个类似“95432,12345,92534,68723”的单元格,可以查询和修改以添加或删除带有查询的邮政编码吗?我希望能够经常做类似的事情:

SELECT franchiseName
FROM database
WHERE zipCode = "12345"

然后显然,显示所有在该邮政编码中有位置的特许经营店。我不想为每个邮政编码创建一个单独的元组吗?不会像:

Pizza Hut, 23, 95432
Pizza Hut, 12, 12345 
Pizza Hut, 07, 92534 
Pizza Hut, 15, 68723

被认为是糟糕的设计,因为重复的特许经营名称可能有多少? (想象一下麦当劳独自一人)

感谢任何帮助

3 个答案:

答案 0 :(得分:1)

非规范化设计会让公司持有该名称和相关的特许经营权。

这也允许存储所有特许经营权共同的公司信息(例如,总部信息)。

答案 1 :(得分:1)

您应该将该信息分成两个表:

franchise(id,name, employee_count)
zipcode(franchise_id,zipcode)

如果'location'包含的信息不仅仅是一个邮政编码,您应该将所有位置放在一个单独的表中,并在特许经营权和地点之间设置一个映射表。

答案 2 :(得分:1)

基本上你是在定义多对多的关系。这种情况下的常见做法是使用包含所有Locations和映射表的表。此映射表包含特许经营权的ID和其中一个位置。使用连接,您可以获得所需的所有信息,并且不会有数据重复。