MySQL:复杂的数据结构和查询

时间:2010-08-06 16:08:34

标签: database-design mysql

我在确定为下面(相当复杂的)数据结构创建数据库表的最佳方法时遇到了一些麻烦,我希望有比我更多经验的人可以提供帮助。我遇到麻烦的主要原因是规范化并不惜一切代价试图避免查询内部循环。

location 1 (location_group_name, owner_id, admin_id)
  location 1.1 (name, address)
     location 1.1.1 (name)
        // DEVICE LIST
        device 1 (manufacturer_id, model_id, serial, purchase_date, service_date)
            Battery (manufacturer_id, model_id, purchase_date, service_date)
            Accesory 1 (manufacturer_id, model_id, purchase_date, service_date)
            Accesory 2 (...)
            Accesory n (...)
        device 2
            Battery
            Accesory 1
            Accesory 2
            Accesory n
        device n

        // STAFF LIST
        person 1 (name, email)
           qualification 1 (type, date)
           qualification 2 (...)
           qualification n (...)
        person 2
        person n
     location 1.1.2
     location 1.1.n
  location 1.2
  location 1.n
location 2
location n

我目前正在考虑将每个设备和人员作为序列化的多维数组插入,但由于cron作业脚本每次都会检查service_date字段这一事实我不确定它的效果如何如果符合某些标准,则会向位置组的管理员和所有者发送自动电子邮件。为了使事情进一步复杂化,设备数据也可以通过model搜索,如果召回,或serial_number可以快速查找,以防用户添加了大量设备和/或没有确切地知道它的位置。

如果问题不是太多,我还想看一下建议数据结构的查询示例(仅因为我认为它可能会使用连接,而我对它们并不熟悉)。

如果您需要任何额外信息,请随时提出,我很乐意详细说明。

提前感谢您,任何输入都将不胜感激!

2 个答案:

答案 0 :(得分:2)

我不完全确定你在这里要做什么,但为什么所有的等级?这是某种商店/设备/员工模式,对吗?在关系数据库中,您可以将离散信息分成各自的部分,并将它们与其他表相关联。因此,如果您有商店/设备/员工,您可以拥有“商店”表,“设备”表,“所有者”表,“员工”表,“stores_employees”表,“owners_stores”表, “devices_stores”表(您可以跟踪其中的库存),“employees_qualifications”表等等。

答案 1 :(得分:0)

看起来你在location1.1.1和设备之间以及location1.1.1和person之间有一对多的关系。我想你最终会在一个循环中查询,或者你要做一些大的查询并循环将它们合并在一起。

不要害怕在循环中查询。通过准备好的陈述,他们不必那么慢。