我正在为摄影网站创建一个数据库,我希望它允许三个主要内容 -
允许所有者/管理员创建客户帐户和凭据,
指定哪些照片应该进入网站上的三个不同的投资组合画廊,以及,
在他们登录时向他们显示唯一客户的照片(以及他们的照片!)。
这是我的第一个数据库设计 - 根据下面的回复,我添加了重点;)并编辑了如下设计。
图片
image_id,
文件名,
描述,
CLIENT_ID,
date_uploaded,
用户/客户
CLIENT_ID,
CLIENT_NAME
用户名,
密码,
案例
portfolio_id,
PORTFOLIO_NAME,
PORTFOLIO_IMAGES
ID,
image_id,
portfolio_id,
我是否认为PORTFOLIO_IMAGES中的最终ID允许我在多个图库中显示一个图像?
感谢
答案 0 :(得分:2)
因为这是你的第一个数据库设计,正如你在评论中提到的那样,缺少必要的东西:ER-Diagram。这有助于理解正在发生的事情。
同义词:用户=帐户,图片=照片,图库=投资组合
已知角色:“管理员”,“客户”
权利示例:“创建帐户”,“删除帐户”,“观看图片”,“添加图库”,“删除图库”,“上传图片”,“删除图片”,... < / p>
用户强>
图片强>
<强> IMAGE_GALLERY 强>
<强>图库强>
<强> USER_ROLE 强>
<强> User_Right 强>
<强>角色强>
<强> Role_Right 强>
从右强>
如果Right
足以将用户权限分开,则可能需要使用Role
删除所有内容。
答案 1 :(得分:1)
images
和users
中,您将引用客户ID,而不是名称。答案 2 :(得分:1)
您可能需要考虑规范化。
假设用户名是唯一的 - 两个人不能拥有相同的用户名,那么你可以消除Users表中的“id”以帮助防止更新/插入/删除异常(这样做几乎可以肯定)将用户放入BCNF,可能是DKNF - 这是一件好事。)
客户很好。但是,客户和用户之间有什么区别?真的......看起来和我差不多。
确保使用外键约束完成引用,我认为应该更好。
编辑:
基于新设计,我有以下建议:
将客户/用户更改为三个表:
ClientNames
- ClientID (PK)
- ClientName
ClientUsernames
- ClientID (PK)
- Username
UsernamePasswords
- Username (PK)
- Password
这是安全的,并说一个客户/用户有一个名字,一个客户/用户有一个用户名,一个用户名有一个密码。我没有看到另一个好的分解(从某种意义上来说它将处于一种正常的形式)。
如果需要,可以通过消除合成“ClientID”键来消除其中一个表。这有一些缺点,可能无法实现(有些人的名字相同!)。
这里的问题是ClientID,ClientName和UserName很可能以不适合将它们填充到同一个表中的方式相互确定。
答案 3 :(得分:0)
回复编辑
您可以通过查询PORTFOLIO_IMAGES并根据需要加入图像或投资组合,在多个投资组合中创建一个图像。例如,如果要显示婚礼组合(伪代码)
SELECT filename,...
FROM images img
INNER JOIN portfolio_images pimg on img.image_id = portfolio_images.image_id
WHERE pimg.portfolio_id = <whatever the id is for wedding portfolio>