gpt4 book ai didi

python - 数据库设计通讯录

转载 作者:行者123 更新时间:2023-11-29 19:45:56 26 4
gpt4 key购买 nike

我正在尝试为地址簿开发 mysql 模式。我不确定的是如何对其进行建模,因为有些联系人将有一个电话号码和一个电子邮件地址,而其他联系人可能有多个电话号码和一个电子邮件地址。在前端,我将创建一个按钮,允许用户添加地址字段。

现在我的模型看起来像这样:

class Person(models.Model):
sex = models.CharField(max_length=32)
first_names = models.CharField(max_length=64)
last_names = models.CharField(max_length=64)
date_of_birth = models.DateField()
marital_status = models.CharField(max_length=64)
nationality = models.CharField(max_length=64)

address_street = models.CharField(max_length=64)
address_alt_line = models.CharField(max_length=64)
address_zip = models.CharField(max_length=64)
address_state = models.CharField(max_length=64)
address_city = models.CharField(max_length=64)
address_country = models.CharField(max_length=64)
phone1 = models.CharField(max_length=64)
phone2 = models.CharField(max_length=64)
phone3 = models.CharField(max_length=64)
phone4 = models.CharField(max_length=64)
phone5 = models.CharField(max_length=64)
email1 = models.CharField(max_length=64)
email2 = models.CharField(max_length=64)
email3 = models.CharField(max_length=64)
email4 = models.CharField(max_length=64)
email5 = models.CharField(max_length=64)
website1 = models.CharField(max_length=64)
website2 = models.CharField(max_length=64)
website3 = models.CharField(max_length=64)
website4 = models.CharField(max_length=64)
website5 = models.CharField(max_length=64)
website6 = models.CharField(max_length=64)
website7 = models.CharField(max_length=64)
website8 = models.CharField(max_length=64)
website9 = models.CharField(max_length=64)

但是我知道这不是很干燥。我想到的另一个选择是为人员创建单独的模型,为地址、电子邮件、电话号码、网站等创建单独的模型,然后将 person.id 作为这些模型的外键:

class Person(models.Model):
sex = models.CharField(max_length=32)
first_names = models.CharField(max_length=64)
last_names = models.CharField(max_length=64)
date_of_birth = models.DateField()
marital_status = models.CharField(max_length=64)
nationality = models.CharField(max_length=64)


class Address(models.Model):
street = models.CharField(max_length=64)
alt_line = models.CharField(max_length=64)
zip = models.CharField(max_length=64)
state = models.CharField(max_length=64)
city = models.CharField(max_length=64)
country = models.CharField(max_length=64)
type = models.CharField(max_length=64)
owner = models.ForeignKey(Person, on_delete=models.CASCADE)


class Phone(models.Model):
number = models.CharField(max_length=64)
type = models.CharField(max_length=32)
owner = models.ForeignKey(Person, on_delete=models.CASCADE)


class OnlineContact(models.Model):
address = models.CharField(max_length=64)
type = models.CharField(max_length=32)
owner = models.ForeignKey(Person, on_delete=models.CASCADE)

这些方法是否好(足够)或者是否有更好的方法?我宁愿不使用 NOSQL 数据库而坚持使用 MySQL。仅供引用,我使用 Python 和 Django。

类 Person(models.Model):

最佳答案

我不认为 DRY 与模型设计相关,除非你使用相同的模型并覆盖它几次

如果将其拆分为 2 个模型,例如:用户,用户详细信息因此将身份验证数据和个人数据分开是合乎逻辑的但在你的情况下,它在表上有很大的分离

为什么您需要这么多表格用于电话、网站、电子邮件也许你的数据设计不正确

关于python - 数据库设计通讯录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40978518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com