Re: [SQL ] 新手求助,总数上限不确定的资料字段

楼主: BigLoser (大鲁蛇)   2014-09-21 20:19:32
※ 引述《meowyih (meowyih)》之铭言:
: 数据库名称:MySQL
: 我只有非常基本的数据库的经验,如果问题太笨,请见谅 m(_ _)m
: 举例来说,假设一个人的 TABLE 的字段有名字、地址、和个人照片:
: 但是因为某些原因,我们被要求一个人的图片和地址的总数不能有上限,
: 有人可能没图片与地址,有人可能有上百个图片和地址,
: 请问这种情况的 TABLE 要长成什么样,或是数据库要怎么设计呢?
这位温拿你好,可以参考一下本鲁蛇的做法,
因为这个状况中,地址和个人照片是相似的东西,所以本鲁蛇只拿其中一个做举例,
这个数据库,需要至少两个资料表:
1.人资料表,用来存放这个人的资讯
2.地址资料表,用来存放所有人的地址,而其中会有一个字段与人资料表
  相关联,来表明这个(一或多个)地址属于哪个人。
人资料表
主索引键 姓名
50 胜文
地址资料表
主索引键 人资料表索引键 地址
100 50 台北帝宝
101 50 美国帝宝
当你有了这样的资料,就可以利用join的技巧,查出某个人拥有那些帝宝了。
这边是查询语法:
select 人资料表.姓名, 地址资料表.地址 from 人资料表
left join 地址资料表 on 人资料表.主索引键 = 地址资料表.人资料表索引键
where 人资料表.主索引键 = 50
结果会是:
姓名   地址
胜文 台北帝宝
胜文   美国帝宝
因为本鲁蛇没有把档案放到过网络上,所以就直接把指令码贴出来了,
希望有善心人士可以推荐本鲁蛇一个方便其他人下载档案的方式。
以下是这个数据库的指令码:
USE [批踢踢数据库板]
GO
/****** Object: Table [dbo].[人资料表] Script Date: 2014/9/21 下午
08:16:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[人资料表](
[主索引键] [int] NOT NULL,
[姓名] [nvarchar](20) NOT NULL,
CONSTRAINT [PK_人资料表] PRIMARY KEY CLUSTERED
(
[主索引键] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[地址资料表] Script Date: 2014/9/21 下午
08:16:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[地址资料表](
[主索引键] [int] NOT NULL,
[人资料表索引键] [int] NOT NULL,
[地址] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_地址资料表] PRIMARY KEY CLUSTERED
(
[主索引键] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[人资料表] ([主索引键], [姓名]) VALUES (50, N'胜文')
INSERT [dbo].[地址资料表] ([主索引键], [人资料表索引键], [地址]) VALUES (100,
50, N'台北帝宝')
INSERT [dbo].[地址资料表] ([主索引键], [人资料表索引键], [地址]) VALUES (101,
50, N'美国帝宝')
作者: meowyih (meowyih)   2014-09-21 20:35:00
受教了! 非常感谢这篇清楚又详细的说明! m(_ _)m
楼主: BigLoser (大鲁蛇)   2014-09-21 20:35:00
阿,我这两个资料表没设关联,请温拿们自己设定
作者: lasda (板桥金城武拉斯达)   2014-09-22 18:18:00
绝对不接受垃圾

Links booklink

Contact Us: admin [ a t ] ucptt.com