数据库设计:用户与联系信息

发布于 2024-11-09 04:11:05 字数 457 浏览 0 评论 0原文

我有一个数据库设计问题。

在我的应用程序中,用户的联系信息包括

  • 电话号码、
  • 电子邮件
  • 地址、第 1
  • 行邮政信箱、
  • 地点(城市),

该信息当前位于“用户”表中,其中包含用户名、名字等其他信息……

事实是,用户必须拥有相同类型的信息(电话、电子邮件等),但属于他的公司。

向“用户”表添加附加字段似乎是多余的。由于数据相似,我可以制作一个包含以下字段的“ContactInfo”表:

  • 电话
  • 电子邮件
  • 地址
  • 邮政信箱
  • ...

这是一个好主意吗?我应该如何处理“user”表和这个“contactInfo”表之间的关系?

编辑:我忘了说公司联系信息不是强制性的。用户可以根本没有公司。

I have a database design question.

In my application, a user has contact information including

  • telephone number
  • email
  • adress line 1
  • postal box
  • Locality (City)

This is currentl located in a "user" table with the other informations like username, first name, ...

The thing is that a user has to have the same kind of information (telephone, email, ...) but for his company.

It seems redundant to add additional fields to the "user" table. As the data are similar, I could make a "ContactInfo" table with the fields:

  • phone
  • email
  • address
  • postal box
  • ...

Is it a good idea and how should I do the relation between the "user" table and this "contactInfo" table ?

EDIT: I forgot to say that the company contact information is not obligatory. A user can have no company at all.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

水晶透心 2024-11-16 04:11:05

用户之间具有 1:M 关系的任何内容都应该位于其自己的表中。如果您只关心用户的主要联系信息,那么您可以将其保留在用户表中。

例如:如果可以接受两个电话号码(或更多),那么您将拥有另一个表,其中包含用户表的外键以及电话号码、电话类型和联系顺序优先事项。

Anything with a 1:M relationship between the user should be on its own table. If you only care about the user's primary contact information, then you can get away with keeping it on the User table.

For example: If it is acceptable to have two phone numbers (or more) then you will have another table with a foreign key to your users table and the phone number, the phone type, and the contact order priority.

゛时过境迁 2024-11-16 04:11:05

您应该有一个单独的电话表、一个单独的电子邮件表和一个单独的地址表。人们拥有这三者中的不止一种。

You should have a separate phone table, a separate email table and a separate address table. People have more than one of all three.

孤单情人 2024-11-16 04:11:05

单独的桌子是正确的选择。

CREATE TABLE users (
  id INT UNSIGNED NOT NULL,
  foo VARCHAR(50),
  PRIMARY KEY (id) );

CREATE TABLE user_contact_info (
  id INT UNSIGNED NOT NULL,
  user_id INT UNSIGNED NOT NULL,
  contact_type VARCHAR(40) NOT NULL,
  phone VARCHAR(20),
  email VARCHAR(200),
  address VARCHAR(200),
  postal_box VARCHAR(20),
  PRIMARY KEY (id, user_id) );

如果您的数据库支持外键,则应该有一个从 user_contact_info.user_idusers.id 的外键。 user_contact_info.contact_type 将设置为 workhome 或您需要的任何其他类别。

Separate tables are the right choice.

CREATE TABLE users (
  id INT UNSIGNED NOT NULL,
  foo VARCHAR(50),
  PRIMARY KEY (id) );

CREATE TABLE user_contact_info (
  id INT UNSIGNED NOT NULL,
  user_id INT UNSIGNED NOT NULL,
  contact_type VARCHAR(40) NOT NULL,
  phone VARCHAR(20),
  email VARCHAR(200),
  address VARCHAR(200),
  postal_box VARCHAR(20),
  PRIMARY KEY (id, user_id) );

If your database supports foreign keys, there should be a foreign key from user_contact_info.user_id to users.id. user_contact_info.contact_type would be set to work or home or whatever other categories you need.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文