Konwencja jest ważna, moim zdaniem ważniejsza od tego jaka ona jest. Ważne, aby była spójna.
Osobiście dorobiłem się własnej konwencji i wygląda ona mniej więcej tak:
- Używam przedrostków - przede wszystkim.
- Wszystkie tabele rozpoczynają się literą
t
, np. tIvItem
- Wszystkie widoki rozpoczynają się literą
v
, np. vDfLockObjects
- Wszystkie procedury składowane rozpoczynają się literą
p
, np. pDfLogIU
- Nazwy obiektów (wszystkich) piszę CaMelEm
- Nazwy pól w tabelach nie posiadają przedrostków (lub przyrostków) określających, z której tabeli pochodzą. Uważam to za błędne i wręcz szkodliwe...
- Pole, za którym stoi konkretny byt, np. kod kontrahenta, w każdej tabeli nazywa się tak samo. U mnie będzie to
IdContractor
- Wszystkie nazwy pól ID rozpoczynają się od
Id
np. jak wyżej
- We wszystkich zapytaniach używam aliasów dla tabel/widoków. W sumie używam tego tylko po to, aby jednoznacznie określić o jakie pole chodzi, a poza tym moje oprogramowanie do klepania SQL zdecydowanie lepiej sobie radzi z podpowiadaniem obiektów, kiedy aliasy w zapytaniu istnieją...
Przykładowe zapytanie w takiej bazie wygląda tak:
with cteQtyplanned as
( select P.IdTppRouteDocSource, sum(P.Qty) as QtyPlanned
from tPPTask P
where P.IdTppRouteDocSource is not NULL and P.Status <> 4 -- nie bierz pod uwagę zadań anulowanych
group by P.IdTppRouteDocSource
)
SELECT
DH.IdDocHdr,
DH.IsVoid,
DML.IdDocLine,
DML.IdDocLineMrp,
DH.DocNo,
DHM.AddInfo,
DH.DocDate,
DH.DocStatus,
DH.IdContractor,
DH.IdSyDepartment,
DML.DocDateReq,
DL.IdIvItem,
DL.Qty,
COALESCE(PT.QtyPlanned, 0) as QtyPlanned,
DL.Qty - COALESCE(PT.QtyPlanned, 0) as QtyToPlan,
TR.IdTppRoute,
TR.IdTppTechRouteRelation,
TR.TppOperation,
TR.IdDevice,
TR.IdTool,
TR.Multiple,
TR.Tp,
TR.TpRearm,
TR.Tz,
TR.Tpz,
TR.Tj,
TR.EmpQty,
DL.SmallNote
FROM tTppTechRoute TR
inner join tTppTechRouteRelation TRL on (TRL.IdTppTechRouteRelation = TR.IdTppTechRouteRelation)
inner join tDocLineMrp DML on (DML.IdDocLineMrp = TRL.IdDocLineMrp)
inner join tDocLine DL on (DML.IdDocLine = DL.IdDocLine)
inner join tDocHdr DH on (DH.IdDocHdr = DL.IdDocHdr)
left join tDocHdrMrp DHM on (DL.IdDocHdr = DHM.IdDocHdr)
left join cteQtyplanned as PT on (PT.IdTppRouteDocSource = TR.IdTppRoute)