Actually a UUID or a GUID has a 100% certainty of a collision,  not just a 
possibility of a collision.  Just as all hash algorithms which take something 
and generate a shorter "hash" or "checksum" will always have collisions.  
Without exception and as an absolute 100% certainty.  There is no way to avoid 
this mathematical certainty.  

However, whether the absolute and unmitigatable certainty of a collision is of 
any import or not is an entirely different matter.

---
The fact that there's a Highway to Hell but only a Stairway to Heaven says a 
lot about anticipated traffic volume.


>-----Original Message-----
>From: sqlite-users [mailto:sqlite-users-
>boun...@mailinglists.sqlite.org] On Behalf Of Stephen Chrzanowski
>Sent: Friday, 24 November, 2017 11:21
>To: SQLite mailing list
>Subject: Re: [sqlite] "BIGINT" doesn't act like INTEGER on table
>creation [Bug]
>
>Obviously, this is a design time factor, but, in my applications, I
>always
>use integer IDs if I'm ever going to bring the info that row contains
>(And
>other relevant info) to the UI.  I have never had a solid reason to
>use
>GUIDs or UUIDs or whatever.
>
>Any time I'm adding something to a listbox, combo box, or whatever it
>is,
>that element of that lists Object (RE: tStringList) gets the ID that
>is in
>the database.  Using a UID would not work, unless I spend CPU cycles
>converting a 32 character string to bytes, then to 128-bit numbers.
>But
>then, my compiler is 32-bit only, but can emulate 64-bit numbers.
>
>I can see the reasoning why a UUID is appealing, but, an ID is an ID.
>It
>doesn't matter what it is.  When you use INTEGER PRIMARY KEY, you get
>from
>1 to 2^64-1 numbers to play with at LEAST.  I don't know if SQLite
>will go
>into 128 or 256bit integers.  With UUID, you're looking at a chance
>of
>collision.  Small, yes.  But its there.  With INTEGER PRIMARY KEY,
>you're
>going up by one each time.  Since I will never care what that ID is,
>as a
>developer or as a user, Integer IDs are perfect.
>
>
>On Fri, Nov 24, 2017 at 12:33 PM, Richard Damon <Richard@damon-
>family.org>
>wrote:
>
>> On 11/24/17 3:51 AM, R Smith wrote:
>>
>>>
>>> On 2017/11/24 5:23 AM, Peter Halasz wrote:
>>>
>>>> As for whether I need to use AUTOINCREMENT, it seemed like a good
>idea to
>>>> avoid rowid reuse, but I can avoid using it for the sake of
>optimization,
>>>> so probably will.
>>>>
>>>
>>> I agree with Keith and has many times mentioned this before
>(apologies to
>>> others for the déjà vu). You as the programmer / designer should
>always be
>>> in control of how and why a new ID is assigned.
>>>
>>> I would disagree here, in many cases the ID (rowid) is a purely
>internal
>> attribute with the purpose of accessing the data. It may have no
>problem
>> domain significance. If the primary key's purpose is purely data
>access,
>> then letting the data access layer handle it makes sense. The one
>case
>> where it makes sense for the programmer / designer to take control
>of the
>> PK is if the domain naturally has an identifier that would be
>suitable for
>> the key (an reasonable sized integer that is naturally unique), The
>> designer should also be fairly certain that it will remain so.
>>
>>> It feels like a saving to let the DB engine do it for you, but it
>isn't
>>> really. What you save in a bit of code that decides the new ID
>before-hand
>>> (which can be as simple as SELECT MAX(id)+1 FROM t) you typically
>have to
>>> catch up afterward in code to do the usual get-LastInsertedID and
>then pop
>>> that in wherever stuff wants to link to the new item. It's a zero-
>sum gain
>>> really.
>>>
>> The big issues with this method is if two processes both try to
>create a
>> new item at the same time, one of them is going to get an error and
>have to
>> redo its work. If you start by creating the record with an
>autoincrement
>> id, and then getting the ID used, then you remove the need to
>handle the
>> error on the simultaneous creation.
>>
>>>
>>> I'm not even a big fan of Integer IDs, I think codes / UUIDs are
>best,
>>> but obviously the speed/size gain with an integer key (especially
>INTEGER
>>> PRIMARY KEY row-id alias in SQLite) can't be ignored.
>>>
>>> Making a UUID or other 'big' key the primary access key will
>increase the
>> cost of looking up a record for ALL purposes. For small tables, it
>might
>> not be measurable, but small tables are less apt to need that sort
>of PK
>> either. It can make sense to use a key like that as an External Key
>to
>> describe the record to the outside world. Perhaps if the ONLY
>accesses to a
>> table are via this 'big' key, and very rarely by some other
>key/field,
>> making the big key the primary key would make sense.
>>
>>> Disclaimer: This is only my opinion, well, I'm not completely
>alone in
>>> it, but it is still an opinion and not a general SQL prescription.
>>>
>>
>> --
>> Richard Damon
>>
>>
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users@mailinglists.sqlite.org
>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-
>users
>>
>_______________________________________________
>sqlite-users mailing list
>sqlite-users@mailinglists.sqlite.org
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to