首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL数据类型问题

SQL数据类型问题
EN

Stack Overflow用户
提问于 2010-12-31 02:03:35
回答 4查看 231关注 0票数 4

我在为一个简单的Oracle SQL数据库中的属性选择适当的数据类型时遇到了一些问题。

这是我的情况,我有两个表-- Customer和Agent。我的Agent表中的一个属性称为Signed Customers,我需要它以某种数组的形式保存一组整数(客户编号)。

Customer中的主键是Customer_ID,并且是INT。它与“已签约客户”类型有关?在表Agent中。那么,“签约客户”的类型应该是什么呢?

任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-31 03:26:08

假设一个客户最多只能登录到一个代理,那么在customers表中需要一个指向代理表的外键列(而不是像您的问题所建议的那样,从一个代理指向另一个客户):

代码语言:javascript
复制
CREATE TABLE agents (
    agent_id int PRIMARY KEY,
    ... more columns ...
);

CREATE TABLE customers (
    customer_id int PRIMARY KEY,
    agent_id int REFERENCES agents,
    ... more columns ...
);

(但是,如果一个客户可以与多个代理签约,那么您需要OMG小马的答案和一个链接表。你需要自己弄清楚你需要什么。)

票数 2
EN

Stack Overflow用户

发布于 2010-12-31 02:08:51

您需要一个位于CUSTOMER和AGENT表之间的表,将它们链接在一起:

AGENT_CUSTOMERS

主键,AGENT.AGENT_ID)

  • CUSTOMER_ID的外键(主键,CUSTOMER.CUSTOMER_ID)

的外键,

  • AGENT_ID

您寻找的数据类型意味着存储非正规化数据,这将使尝试检索特定客户值变得非常痛苦。通过正确的设置来省去自己的麻烦。

票数 10
EN

Stack Overflow用户

发布于 2011-01-17 03:55:35

re:“你无论如何都不能从单个值连接到一个数组,或者至少不能以任何类型的性能连接到数组。”- HLGEM Dec 30 '10 at 18:11

我可以而且肯定会一直加入以逗号分隔的列表。

在SQL2000中,他们引入了UDF,我经常使用一个名为Split的函数来获取逗号分隔的列表并将其转换为表。

在SQl 2005和更高版本中,您可以交叉应用此函数,以便联接多行(将逗号分隔的列表作为单个列),以便将其反规范化为适当的格式。

我使用这个功能来查找属性列表(对于房地产),它通常工作得足够好。

代码语言:javascript
复制
SELECT * FROM PropertyLists CROSS APPLY [OLReweAbf].[dbo].[udfSplit] (PropertyLists.propertyList,',')
WHERE PropertyLists.Area = 104

SQL Split Function,作者: herbee:

代码语言:javascript
复制
CREATE FUNCTION [dbo].[udfSplit](@text nvarchar(max), @delimiter char(1) = ‘ ‘)
  RETURNS @Strings TABLE ( position int IDENTITY PRIMARY KEY, value nvarchar(max) )
AS
BEGIN
    DECLARE @index int
    SET @index = -1
    WHILE (LEN(@text) > 0)
    BEGIN
        SET @index = CHARINDEX(@delimiter , @text)
        IF (@index = 0) AND (LEN(@text) > 0)
        BEGIN
            INSERT INTO @Strings VALUES (@text) BREAK
        END
        IF (@index > 1)
        BEGIN
            INSERT INTO @Strings VALUES (LEFT(@text, @index – 1))
            SET @text = RIGHT(@text, (LEN(@text) – @index))
        END
        ELSE
            SET @text = RIGHT(@text, (LEN(@text) – @index))
    END
    RETURN
END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4565027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档