Релации (таблици) в MS SQL Server
Всяка таблица има уникално име, редове (кортежи, записи) и колони (атрибути). Стойностите в една колона са от един и същ тип. Допустимите типове при MS SQL Server са много повече от тези на Access — четири основни групи: низове, числови, дати и часове и други.
Низове от знаци
| Тип | Описание | Памет |
|---|---|---|
char(n) | еднобайтова таблица, ФИКСИРАНА дължина n (до 8000) | n байта — винаги |
varchar(n|MAX) | еднобайтова, ПРОМЕНЛИВА дължина | байтове за дължина + реалната |
nchar / nvarchar | Unicode вариантите (до 4000 знака) | 2 байта на знак |
binary / varbinary | двоични низове (нули и единици) | като char/varchar |
image | двоични данни до 2 GB (изображения, аудио, видео) | реалната дължина |
Фиксирана vs променлива дължина
При char(10) винаги се заделят 10 байта — колкото и да е реалната данна. При varchar — само колкото трябва + байтове за дължината. Unicode типовете (n…) са за текст извън латиницата — например кирилица.
Числови типове
| Тип | Диапазон | Памет |
|---|---|---|
bit | 0 или 1 | до 8 стойности в 1 байт |
tinyint | 0 … 255 | 1 байт |
smallint | −32768 … 32767 | 2 байта |
int | −2147483648 … 2147483647 | 4 байта |
bigint | ±9.2×10¹⁸ | 8 байта |
decimal(p,s) | десетично число: p цифри, s след запетаята | 5–17 байта |
money / smallmoney | парични стойности | 8 / 4 байта |
float(n) / real | двоични дробни (мантиса и порядък) | 4–8 байта |
Десетичното число — decimal
Освен целите и дробните типове има и десетично число: представянето не е двоично, а в десетична бройна система (по 4 бита на цифра). Точността е по-добра — от огромна важност за финанси и сложни системи — за сметка на скоростта на пресмятане.
Дата и час, и другите типове
| Тип | Описание |
|---|---|
datetime / datetime2 | дата и час (до 31.12.9999, точност до 100 ns при datetime2) |
date / time | само дата (3 байта) / само час |
smalldatetime | дата и час с точност 1 минута (4 байта) |
sql_variant | до 8000 байта от произволен тип — колона със стойности от РАЗЛИЧЕН тип |
uniqueidentifier | глобален уникален идентификатор (GUID), 16 байта |
xml | XML форматирани данни до 2 GB |
cursor / table | за операции в базата — НЕ могат да са атрибути на таблица |
Създаване на таблицата Student
В Object Explorer: базата School → десен бутон върху Tables → New\Table. На всеки ред описваме един атрибут: име (Column Name), тип (Data Type) и дали допуска отсъствие на стойност (Allow Nulls).
| Атрибут | Тип | Allow Nulls | Защо |
|---|---|---|---|
| idStudent | int | не | уникален идентификатор |
| name, surname, family | varchar(50) | не | променлива дължина — не знаем колко са дълги имената |
| egn | char(10) | не | фиксирани 10 знака; първичният ключ |
| birth_date | date | не | само дата |
| birth_place, district | varchar(50) | не | населено място и област |
| e_mail | varchar(50) | не | електронна поща |
| mobile | char(12) | ДА | не е задължително ученикът да има телефон |
Ключ и Identity
- Първичен ключ: щракваме в реда на атрибута и в най-лявата колона →
Set Primary Key— появява се изображение на ключ. - В SQL Server няма типа AutoNumber, но
intатрибут може да получи същото поведение: Identity Specification → (Is Identity) = Yes, Identity Increment = 1, Identity Seed = 1 — всеки нов ред се номерира автоматично. Такъв ключ наричаме допълнителен (вътрешен) ключ. - Съхраняваме с Ctrl+S и задаваме името Student.
Практикум
1) Създайте таблицата Student в базата School. 2) Аналогична таблица Staff за персонала (+ атрибут за длъжността). 3) Таблица School_data с данните на вашето училище — наименование, патрон, населено място, адрес, телефон, интернет страница, лого, патронен празник.
Какво трябва да запомниш
- Четири групи типове: низове, числови, дата/час, други.
- char = фиксирана дължина; varchar = променлива; n… = Unicode.
- decimal смята в десетична система — точност за сметка на скорост.
- Identity (Is Identity, Seed, Increment) замества AutoNumber.
- Allow Nulls се маха за задължителните атрибути още при дизайна.