SQL中的两个复合主键

时间:2016-02-10 21:31:46

标签: sql sql-server tsql primary-key composite-primary-key

我正在尝试按如下方式定义表:

function get_IP(){
    $findIP=array(
        'HTTP_CLIENT_IP',
        'HTTP_X_FORWARDED_FOR',
        'HTTP_X_FORWARDED',
        'HTTP_X_CLUSTER_CLIENT_IP',
        'HTTP_FORWARDED_FOR',
        'HTTP_FORWARDED',
        'REMOTE_ADDR'
    );
    $blacklistIP=array(
        '127.0.0.1',
        '255.255.255.255',
    );
    $ip = '';
    foreach($findIP as $http)
    {
        if(function_exists("getenv"))
        {
            $ip = getenv($http);
        }
        else
        {
            if (array_key_exists($http, $_SERVER) !== false){
                foreach (explode(',', $_SERVER[$http]) as $findIP){
                    $ip = trim($findIP);
                }
            }
        }
        if(function_exists("filter_var") && !empty($ip) && in_array($ip, $blacklistIP)===false)
        {
            if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) return $ip;
        }
        else if(preg_match('/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/', $ip) && !empty($ip) && in_array($ip, $blacklistIP)===false)
        {
            return $ip;
        }
    }
    return '0.0.0.0';
}

如何使用两个复合主键创建表?

1 个答案:

答案 0 :(得分:1)

 Name VARCHAR(20) NOT NULL,
 UserId int NOT NULL,
 GroupId int NOT NULL,
 UNIQUE ( UserId, Name),
 UNIQUE ( GroupId, Name)

在关系模型和SQL中,一个键与另一个键之间没有逻辑上的区别,因此没有非常强烈的理由使用不同的语法来指定一个键而不是任何其他键。但是,无论好坏,SQL标准的作者决定限制PRIMARY KEY约束语法只能在每个表中使用一次,而在需要多个键的地方,您必须使用一个或多个相反,UNIQUE限制。可以说放弃这个限制是可取的,但因为它基本上只是一些语法糖,不太可能很快发生。