我已经阅读了关于表关系的各种主题,当我构建我的数据库时,我对我应该怎么做有点困惑。 我的网站上有3种注册类型(艺术家,粉丝,公司)。每个注册用户都会获得一个唯一的密钥和用户名以及相应类型的用户(例如粉丝)。我试图将音乐类型纳入所有类型的注册,但类型也将添加到上传的音乐文件。目前,我正在通过表单中显示的数组列表为每个轨道和用户存储一个音乐类型。然后系统将其存储到适当的字段。但我希望一些用户拥有超过1种类型的存储。 现在我所做的就是:
Users table (total 14 columns)
ID | username | email | password | type | signup | lastlogin | etc.
Settings table (total 10 columns)
ID | username | description | banner | country | genres | avatar etc.
Music table
ID | username | artist | title | maingenre | othergenre | cover | fileurl
通过记住表现,让我们假设有数千名用户正在注册...
我应该在users表中添加所有设置列,还是可以保留,因为我现在拥有它们?当用户表由系统更新时,用户可以更新设置。
我应该根据用户类型拆分用户表吗?例如,艺术家表,粉丝表等,将存储适当的注册和设置?对于站点的某些功能而言,用户类型需要位于列中。
关于音乐表我正在考虑根据用户指定的类型为每个类型制作一个表格来存储上传。这是将曲目存储到数据库的好方法吗?因此,当我想要拨打迪斯科音乐曲目时,我只需使用迪斯科音乐表。
非常感谢任何帮助。
答案 0 :(得分:0)
我认为你的餐桌是这样的,没关系。你不必根据你拥有的用户类型拆分表。但我认为你可以使用的是字体结束技术,允许用户预先形成你想要的活动,这通过控制系统内的信息流来限制它们只是你想要它们做什么。我希望有所帮助。
答案 1 :(得分:0)
不安静确定我完全理解你的表格如何相关,或者你想要或计划做什么,但这里有一个关于如何在你的数据库中存储类型的想法。并将其与您的设置表
连接首先创建表格类型,您将在其中存储所有类型。该表可能看起来像这样
Table: Genres
ID | genres_name | description etc.
ID - 将是主键自动增量 genres_name - 将保留流派的名称(布鲁斯,爵士,迪斯科...) 说明 - 我刚添加的这一栏,如果你想添加每种类型的特定内容,那就没有必要了
下一步是创建表Settings_genres。此表将存储您的Setting表和Genres表之间的关系,并且将如下所示
Table: Settings_genres
settings_id | genres_id
因此,此表中的数据将如下所示(对于具有3种不同类型的设置ID 1)
settings_id | genres_id
------------------------
1 | 2
------------------------
1 | 4
------------------------
1 | 5
------------------------
settings_id和genres_id将是主键对,这意味着您将无法在此表中存储两个相同的对(您可以在一个设置列和一个类型列之间只有一个关系)
这就是所谓的多对多关系,我相信如果你稍微谷歌一点,你可以轻松找到更多关于它的信息。
如果您想从数据库中提取数据,该数据库将显示所有设置和所有类型,您可以使用此类查询执行此操作
SELECT Settings.*, Genres.genres_name, Genres.description
FROM Settings
INNER JOIN Settings_Genres
ON Settings.ID = Settings_Genres.settings_id
INNER JOIN Genres
ON Settings_Genres.genres_id = Genres.ID
ORDER BY ID
这是SQL Fiddle,看看它是什么样的。
如果您想从该表与特定类型相关联的设置表中提取数据,您可以这样做
SELECT Settings.*, Genres.genres_name, Genres.description
FROM Settings
INNER JOIN Settings_Genres
ON Settings.ID = Settings_Genres.settings_id
INNER JOIN Genres
ON Settings_Genres.genres_id = Genres.ID
WHERE Genres.genres_name = 'Rock'
ORDER BY ID;
这也可以通过这个查询来实现,这个查询可能会快一点但是我们不详细说明......
SELECT Settings.*, Genres.genres_name, Genres.description
FROM Settings
INNER JOIN Settings_Genres
ON Settings.ID = Settings_Genres.settings_id
INNER JOIN Genres
ON Settings_Genres.genres_id = Genres.ID
AND Genres.genres_name = 'Rock'
ORDER BY ID;
以下是FIDDLE ......
所以基本上我建议你先了解一下桌子之间的关系,特别是很多很多关系。而且您将看到如何改进数据表设计。
希望我帮助一点。
GL!